﻿///
/// \file CQtLog.h
///
/// \author 李荣业
/// \version V2.0
/// \date 2018.09.03
///

#ifndef CQTLOG_H
#define CQTLOG_H

#include "shared_export.h"
#include "spdlog/spdlog.h"

#define QtLogger  CQtLog::logger_
///
/// \brief 简单的日志模块，使用spdlog日志库接口，异步输出, 实现了日志格式化输出和保存到文件。
/// qWarning 级别以上的警告或错误日志以红色显示
/// 通过设置日志级别，支持运行时实时开启/关闭日志输出
/// 日志格式: [I 2018-10-31 19:02:26.071 12345] Hello world [CMain::main() ..\esviSievesPro\main\app\CMain.cpp:36]
/// 作   者: 李荣业
///
class comlibSHARED_EXPORT CQtLog
{
public:
    static std::shared_ptr<spdlog::logger> logger_;
    /// \brief 初始化日志模块，使用日志功能前必须调用
    /// \param print 是否打印日志到屏幕
    /// \param save 是否保存日志到文件
    /// \param saveDaily 是否按天保存日志(日志文件名仅包含日期,不包含时分秒)
    /// 建议使用Qt单步调试时print设置为false，否则单步调试时打印不出来。其它时候设置为true
    static void init(bool print = true, bool save = true, bool saveDaily = true, bool is_async = true);

    /// \brief 关闭日志模块，关闭后日志功能消失，程序退出时调用，也可以不调用
    static void close();

    /// \brief 设置要保存和打印的级别，高于此级别的日志才会被保存和打印，默认为 QtDebugMsg
    /// \param level 临界级别
    static void setLevel(QtMsgType level);

    /// \brief 设置是否调用qInstallMessageHandler注册消息处理函数
    /// \param isInstallMsgHandler 含义同上
    static void setIsInstallMsgHandler(bool isInstallMsgHandler);

private:
    CQtLog();
    ~CQtLog();
    Q_DISABLE_COPY(CQtLog)
};

#endif  // CQTLOG_H
